package creational.singleton.idler.staticinnerclass;

// 静态内部类实现方式

/**
 * 静态内部类单例模式中实例由内部类创建，由于 JVM 在加载外部类的过程中, 是不会加载静态内部类的, 只有内部类的属性/方法被调用时才会被加载, 并初始化其静态属性。静态属性由于被 `static` 修饰，保证只被实例化一次，并且严格保证实例化顺序。
 * 第一次加载Singleton类时不会去初始化INSTANCE，只有第一次调用getInstance，虚拟机加载SingletonHolder,并初始化INSTANCE，这样不仅能确保线程安全，也能保证 Singleton 类的唯一性。
 */
public class Singleton {

    //私有构造方法
    private Singleton() {
    }

    private static class  InstanceHolder{
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton getInstance(){
        return InstanceHolder.INSTANCE;
    }


}
